package com.estudos.service;

import java.util.List;

import javax.sql.rowset.serial.SerialException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.ModelAndView;

import com.estudos.dao.UsuarioDao;
import com.estudos.model.Usuario;

import exception.ConexaoException;
import exception.ServiceException;
@Service
public class UsuarioService {
	@Autowired
	private Usuario usu;
	@Autowired
	private ModelAndView view;
	@Autowired
	private UsuarioDao usuDao;
	String pagina = "usuario/listarUsuario";
	
	public ModelAndView listarUsuarios(){
		pagina = "usuario/listarUsuario";
		List<Usuario> usuarios = null;
		try {
			usuarios = usuDao.listar();
		} catch (ConexaoException e) {
			showErro(pagina, e);
		}
		view.addObject("listaUsuarios", usuarios);
		view.setViewName(pagina);
		return view;
	}
	
	public ModelAndView novoUsuario(){
		pagina = "usuario/cadastroUsuario";
		view.addObject("cadUsuario", null);
		view.setViewName(pagina);
		return view;
	}
	
	
	public ModelAndView iniciarEditar(long id){
		pagina = "usuario/cadastroUsuario";
		try {
			usu = usuDao.localizar(id);
			view.addObject("cadUsuario", usu);
		} catch (ConexaoException e) {
			showErro(pagina, e);
		}
		view.setViewName(pagina);
		return view;
	}
	

	public ModelAndView persistir(Usuario usuario){
		System.out.println("AAAAAAAA chegou no persistir");
		try {
			
			if(usuario.getId() != 0){
				alterar(usuario);
			}
			if(usuario.getNome() == null || usuario.getNome().trim().isEmpty()){
				throw new ServiceException("nome incorreto");
			}
			if(usuario.getLogin() == null || usuario.getLogin().trim().isEmpty()){
				throw new ServiceException("login nullo ou zavio");
			}
			if(usuario.getLogin().length() <= 4){
				throw new ServiceException("login menor que 4");
			}
			if(usuario.getSenha() != null || !usuario.getSenha().trim().isEmpty()){
				if(usuario.getSenha().length() <= 4){
					throw new ServiceException("senha menor que 4");
				}	
			}
			usuDao.persistir(usuario);
		} catch (ConexaoException | ServiceException e) {
			showErro(pagina, e);
		}

		view.setViewName(pagina);
		return view;
	}
	
	public ModelAndView alterar(Usuario usuario){
		System.out.println("AAAAAAAA chegou no Alterar SERVICE");
		try {

			if(usuario.getNome() == null || usuario.getNome().trim().isEmpty()){
				throw new ServiceException("nome incorreto");
			}
			if(usuario.getLogin() == null || usuario.getLogin().trim().isEmpty()){
				throw new ServiceException("login nullo ou zavio");
			}
			if(usuario.getLogin().length() <= 4){
				throw new ServiceException("login menor que 4");
			}
			if(usuario.getSenha() != null || !usuario.getSenha().trim().isEmpty()){
				if(usuario.getSenha().length() <= 4){
					throw new ServiceException("senha menor que 4");
				}	
			}
			usuDao.alterar(usuario);
		} catch (ConexaoException | ServiceException e) {
			showErro(pagina, e);
		}

		view.setViewName(pagina);
		return view;
	}
	
	
	
	public void remover(int id){
			if(id==0){
				System.out.println("Erro ao validar excluir/ usuario ID esta vindo null");
			}
			try {
				   usuDao.remover(id);
				   pagina = "usuario/listarUsuario";
				} catch (ConexaoException e) {
				e.printStackTrace();
				}
			}		

	
	public void showErro(String pagina, Exception e){
		view.addObject("msg", e.getMessage());
		pagina = "pgMsg";
		usuDao.rollBack();
		e.printStackTrace();
	}
}
